package com.mastercard.assets.web.struts.forms ;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.upload.FormFile;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.jpa.TblAsset;
import com.mastercard.assets.jpa.TblCampania;
import com.mastercard.assets.jpa.TblCampaniaMes;
import com.mastercard.assets.jpa.TblCampaniaProductoAdq;
import com.mastercard.assets.jpa.TblCampaniaProductoUsuario;
import com.mastercard.assets.jpa.TblPaquete;
import com.mastercard.assets.jpa.TblUsuario;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.util.to.ManejadorPaquetesAsignados;
import com.mastercard.assets.web.util.to.ManejadorPaquetesSolicitar;
import com.mastercard.assets.web.util.to.PaqueteAutorizado;
import com.mastercard.assets.web.util.to.PaqueteSolicitar;
import com.mastercard.assets.web.util.to.TblAssetWraper;
import com.mastercard.assets.web.util.to.UserLogin;

public class CampanasPorAutorizarForm
	extends
		ActionForm
{
	private List< TblCampania > campanias = new ArrayList< TblCampania >( ) ;
	private TblCampania campania ;
	private int cveCampania ;
	private int cveCuenta ;
	private int operation ;
	private int page ;
	private FormFile bc ;
        private int[] meses ;
        private List< TblCampaniaProductoAdq > tblCampaniaProductoAdq ;
        private List< TblCampaniaProductoUsuario > tblCampaniaProductoUsr ;
        private List<TblCampaniaMes> tblCampaniaMeses ;
        private int[] ttp ;
        private int total ;

	public FormFile getBc() {
		return bc;
	}

	public void setBc(FormFile bc) {
		this.bc = bc;
	}

	public int getPage() {
		return page;
	}

	public void setPage(int page) {
		this.page = page;
	}

	public TblCampania getCampania() {
		return campania;
	}

	public void setCampania(TblCampania campania) {
		this.campania = campania;
		if( campania != null )
			this.cveCampania = campania.getCveCampania( ) ;
	}

	public int getCveCuenta() {
		return cveCuenta;
	}

	public void setCveCuenta(int cveCuenta) {
		this.cveCuenta = cveCuenta;
	}

	public int getOperation() {
		return operation;
	}

	public void setOperation(int operation) {
		this.operation = operation;
	}

	public int getCveCampania() {
		return cveCampania;
	}

	public void setCveCampania(int cveCampania) {
		this.cveCampania = cveCampania;
	}

	public ActionErrors validate( ActionMapping mapping , HttpServletRequest request )
	{
		ActionErrors errors = new ActionErrors( ) ;
		
		return errors ;
	}

	public List<TblCampania> getCampanias() {
		return campanias;
	}

	public void setCampanias(List<TblCampania> campanias) {
		this.campanias = campanias;
	}

	public int getCampanasAutorizadas( )
	{
		// en caso de null
		if( campanias == null || campanias.size( ) == 0 )
			return 0 ;
		
		int res = 0 ;
		
		for( TblCampania c : campanias )
			// en caso de estar en estado 1
			if( c.getBandera( ) == 1 )
				res++ ;
		
		return res ;
	}

	public int getCampanasPorAutorizar( )
	{
		// en caso de null
		if( campanias == null || campanias.size( ) == 0 )
			return 0 ;
		
		int res = 0 ;
		
		for( TblCampania c : campanias )
			// en caso de estar en estado 3
			if( c.getBandera( ) == 3 )
				res++ ;
		
		return res ;
	}

	public int getCampanasRechazadas( )
	{
		// en caso de null
		if( campanias == null || campanias.size( ) == 0 )
			return 0 ;
		
		int res = 0 ;
		
		for( TblCampania c : campanias )
			// en caso de estar en estado 2
			if( c.getBandera( ) == 2 )
				res++ ;
		
		return res ;
	}
	
	public List< TblAssetWraper > getAssets( )
	{
		if( campania == null )
			return new ArrayList< TblAssetWraper >( ) ;
		
		// toma todos los paquetes
		List< TblPaquete > paquetes = campania.getTblPaquetes( ) ;
		
		List< TblAssetWraper > assets = new ArrayList< TblAssetWraper >( ) ;
		
		// en caso de que paquetes sea null
		if( paquetes == null )
			return assets ;
		
		// recorre los paquetes
		for( TblPaquete paq : paquetes )
		{
			// toma el asset al que pertenece el paquete
			TblAsset asset = paq.getTblAsset( ) ;
			
			// en caso del null
			if( asset == null )
				// siguiente
				continue ;
			
			// hace la comparacion con los que ya estan
			boolean yaEsta = false ;
			
			TblAssetWraper wraper = null ;
			
			// recorre los assets
			for( TblAssetWraper as : assets )
				// en el caso de que ya haya una igual
				if( as.getCveAsset( ) == asset.getCveAsset( ) )
				{
					// cambia bandera
					yaEsta = true ;
					
					wraper = as ;
					
					// quiebra el ciclo
					break ;
				}
			
			// en caso de que no exista
			if( ! yaEsta )
				// lo agrega
				assets.add( new TblAssetWraper( asset ) ) ;
			// en caso de que si exista
			else
				wraper.addPackage( ) ;
				
		}// termina for par recorrer paquetes
		
		// regresa los assets que resultaron
		return assets ;
		
	}

    /**
     * @return the meses
     */
    public int[] getMeses() {
        return meses;
    }

    /**
     * @param meses the meses to set
     */
    public void setMeses(int[] meses) {
        this.meses = meses;
    }

    /**
     * @return the tblCampaniaProductoAdq
     */
    public List< TblCampaniaProductoAdq > getTblCampaniaProductoAdq() {
        return tblCampaniaProductoAdq;
    }

    /**
     * @param tblCampaniaProductoAdq the tblCampaniaProductoAdq to set
     */
    public void setTblCampaniaProductoAdq(List< TblCampaniaProductoAdq > tblCampaniaProductoAdq) {
        this.tblCampaniaProductoAdq = tblCampaniaProductoAdq;
    }

    /**
     * @return the tblCampaniaProductoUsr
     */
    public List< TblCampaniaProductoUsuario > getTblCampaniaProductoUsr() {
        return tblCampaniaProductoUsr;
    }

    /**
     * @param tblCampaniaProductoUsr the tblCampaniaProductoUsr to set
     */
    public void setTblCampaniaProductoUsr(List< TblCampaniaProductoUsuario > tblCampaniaProductoUsr) {
        this.tblCampaniaProductoUsr = tblCampaniaProductoUsr;
    }

    /**
     * @return the ttp
     */
    public int[] getTtp() {
        return ttp;
    }

    /**
     * @param ttp the ttp to set
     */
    public void setTtp(int[] ttp) {
        this.ttp = ttp;
    }

    /**
     * @return the total
     */
    public int getTotal() {
        return total;
    }

    /**
     * @param total the total to set
     */
    public void setTotal(int total) {
        this.total = total;
    }

    /**
     * @return the tblCampaniaMeses
     */
    public List<TblCampaniaMes> getTblCampaniaMeses() {
        return tblCampaniaMeses;
    }

    /**
     * @param tblCampaniaMeses the tblCampaniaMeses to set
     */
    public void setTblCampaniaMeses(List<TblCampaniaMes> tblCampaniaMeses) {
        this.tblCampaniaMeses = tblCampaniaMeses;
    }
	
}
